// static/js/curl_to_excel.js


// 导入 showAlert :
import { showAlert } from './common.js';
import { showAlertNew } from './common.js';


// 美化 Table 的 data 列 Json 数据 :
document.addEventListener('DOMContentLoaded', function() {
    const jsonDataScript = document.getElementById('jsonData');
    if (jsonDataScript && jsonDataScript.textContent) {
        let rawJson = jsonDataScript.textContent.trim();

        // 如果 JSON 为空，则回写 {}
        if (rawJson.length === 0) {
            rawJson = '{}';
        }

        try {
            const jsonData = JSON.parse(rawJson);
            const formattedJson = JSON.stringify(jsonData, null, 4); // 缩进 4 个空格

            // 创建并显示 <pre><code> 块，保持换行和缩进
            const displayArea = document.createElement('pre');
            const codeBlock = document.createElement('code');
            codeBlock.textContent = formattedJson;
            displayArea.appendChild(codeBlock);

            // 清空原始内容并替换为格式化后的 JSON
            jsonDataScript.innerHTML = '';
            jsonDataScript.appendChild(displayArea);

            // 使用 highlight.js 进行语法高亮
            if (typeof hljs !== 'undefined') {
                hljs.highlightBlock(codeBlock);
            }
        } catch (e) {
            console.error('解析 JSON 失败:', e);

            // 解析失败时回写原值
            jsonDataScript.textContent = rawJson;
        }
    } else {
        console.error('未找到包含 JSON 数据的脚本标签，或脚本内容为空。');
    }
});


// 复制 Table 数据作为 Excel 格式, 便于粘贴 :
function copyTable(msg='数据已复制到剪切板', duration=2000) {
    const table = document.getElementById('dataTable');

    let rowData = [];

    for (let i = 2, row; row = table.rows[i]; i++) {
        let rowText = [];

        for (let j = 0, col; col = row.cells[j]; j++) {
            let cellText = col.innerText.trim();
            cellText = cellText.replace(/_x000D_/g, '');
            try {
                let jsonData = JSON.parse(cellText);
                cellText = JSON.stringify(jsonData, null, 4)
                    .replace(/\n/g, '\n')
                    .replaceAll('"', '""');
                    //.replace(/"/g, '""');
            } catch (e) {
                // cellText = cellText.replace(/"/g, '""');
                cellText = cellText.replaceAll('"', '""');
            }

            rowText.push(`"${cellText}"`);
        }

        rowData.push(rowText.join('\t'));
    }

    // \n, 会导致复制出来每一行都有个 "_x000D_" , \r\n 可避免该问题;
    // const data = rowData.join('\n');
    const data = rowData.join('\r\n');

    // 尝试使用 Clipboard API
    if (navigator.clipboard) {
        navigator.clipboard.writeText(data).then(function () {
            showAlertNew(msg, duration);
        }).catch(function (err) {
            showAlertNew('复制失败: ' + err, duration);
        });
    } else {
        // 如果 Clipboard API 不可用，使用传统方法
        const textarea = document.createElement('textarea');
        textarea.value = data;
        document.body.appendChild(textarea);
        textarea.select();
        try {
            document.execCommand('copy');
            showAlertNew(msg, duration);
        } catch (err) {
            showAlertNew('复制失败: ' + err, duration);
        }
        document.body.removeChild(textarea);
    }
};


// 写入 Excel :
function write_to_excel() {
    // 弹出文件选择对话框
    const input = document.createElement('input');
    input.type = 'file';
    input.accept = '.xlsx';

    input.onchange = function (event) {
        const file = event.target.files[0];

        if (!file) {
            alert('请选择一个 Excel 文件');
            return;
        }

        // 获取文件的绝对路径
        const excelPath = file.path || file.webkitRelativePath || file.name;

        // 获取页面上的数据
        const tableData = document.getElementById('tableData').rows[0];
        const headers = Array.from(document.querySelectorAll('#dataTable thead tr:nth-child(2) th')).map(th => th.textContent.trim());
        const cells = Array.from(tableData.cells).map(cell => cell.textContent.trim());

        // 构造 excelData
        const excelData = {};
        headers.forEach((header, index) => { excelData[header.toLowerCase()] = cells[index]; });

        // 构造请求数据
        const jsonData = {
            excel_path: excelPath,
            excel_data: {
                ...excelData,
            },
            sheet_name: document.getElementById('sheet_name_input').value
        };

        // 发送 AJAX 请求
        fetch('/excel_write', {
            method: 'POST',
            headers: {'Content-Type': 'application/json',},
            body: JSON.stringify(jsonData),
        })
        .then(response => response.json())
        .then(data => {
            if(data['status'] == '1'){
                console.log('你打开着 Excel 还点什么 <写入用例文件> 按钮 ,,,,,, 是不是有那个大病 ,,,,,, 哈哈哈')
                copyTable('无法写入, 复制成功, 请粘贴', 5000)
            }else{
                showAlertNew(data['msg'], 4000);
            };
        })
        .catch((error) => {
            showAlertNew(error, 4000);
        });
    };
    input.click();
};


// 写入 Excel :
function write_to_excel_new() {
    // 检查 localStorage 是否有缓存的文件路径
    let cachedExcelPath = localStorage.getItem('cachedExcelPath');

    // 给一个确认框, 确认则直接应用, 取消则重新选择 :
    //if (cachedExcelPath) {
    //    if (confirm("上次选择的文件: " + cachedExcelPath + "\n是否继续使用该文件?")) {
    //        processExcelPath(cachedExcelPath);
    //        return;
    //    }
    //}

    // 不给确认框, 只要缓存中有, 就应用缓存中的数据, 不想用就手动点击清理文件名按钮清除缓存中的文件名, 这样的交互少一层确认, 比较方便 ...
    if (cachedExcelPath) {
        processExcelPath(cachedExcelPath);
            return;
    }

    // 弹出文件选择对话框
    const input = document.createElement('input');
    input.type = 'file';
    input.accept = '.xlsx';

    input.onchange = function (event) {
        const file = event.target.files[0];

        if (!file) {
            alert('请选择一个 Excel 文件');
            return;
        }

        // 获取文件的绝对路径
        const excelPath = file.path || file.webkitRelativePath || file.name;

        // 缓存文件路径
        localStorage.setItem('cachedExcelPath', excelPath);

        processExcelPath(excelPath);
    };
    input.click();
}


// 调用接口实现写入 :
function processExcelPath(excelPath) {
    // 获取页面上的数据
    const tableData = document.getElementById('tableData').rows[0];
    const headers = Array.from(document.querySelectorAll('#dataTable thead tr:nth-child(2) th')).map(th => th.textContent.trim());
    const cells = Array.from(tableData.cells).map(cell => cell.textContent.trim());

    // 构造 excelData
    const excelData = {};
    headers.forEach((header, index) => { excelData[header.toLowerCase()] = cells[index]; });

    // 构造请求数据
    const jsonData = {
        excel_path: excelPath,
        excel_data: {
            ...excelData,
        },
        sheet_name: document.getElementById('sheet_name_input').value
    };

    // 发送 AJAX 请求
    fetch('/excel_write', {
        method: 'POST',
        headers: {'Content-Type': 'application/json',},
        body: JSON.stringify(jsonData),
    })
    .then(response => response.json())
    .then(data => {
        if(data['status'] == '1'){
            console.log('你打开着 Excel 还点什么 <写入用例文件> 按钮 ,,,,,, 是不是有那个大病 ,,,,,, 哈哈哈')
            copyTable('写入失败, 已复制, 请粘贴', 5000)
        }else{
            showAlertNew(data['msg'], 4000);
        };
    })
    .catch((error) => {
        showAlertNew(error, 4000);
    });
}


// 清除缓存的按钮功能
function clearCache() {
    console.log('清理浏览器缓存中的文件名')
    localStorage.removeItem('cachedExcelPath');
    showAlertNew('文件名缓存已清除, 下次点击写入用例文件需要进行文件选择', 4000);
}


// 挂在到 windwo 对象 :
window.copyTable = copyTable;  // 复制表格 :
window.write_to_excel = write_to_excel;  // 写入 Excel :
window.write_to_excel_new = write_to_excel_new;  // 写入 Excel :
window.clearCache = clearCache;  // 清除 ExcelPath 缓存 :